package com.kob.design.proxy.jdk_proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;


/**
 * @Description: 获取代理对象的工厂类
 * @Author: fyt
 * @Date: 2024/4/15 11:40
 **/
public class ProxyFactory{
    //说明目标对象
    private SellStation sellStation = new SellStation();
    /**
     * @Description: 返回代理对象
     * @Author: fyt
     * @Date: 11:47 2024/4/15
     * @Params: []
     * @Return: com.kob.design.proxy.jdk_proxy.Sell
     */
    public Sell getProxyObject() {

        /*
            ClassLoader loader, ： 类加载器
            Class<?>[] interfaces, ：代理类实现的接口的字节码对象
            java.lang.reflect.InvocationHandler h ： 代理对象的调用处理程序
        */
        return  (Sell) Proxy.newProxyInstance(
                sellStation.getClass().getClassLoader(),
                sellStation.getClass().getInterfaces(),
                new InvocationHandler() {
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        System.out.println("jdk动态代理");
                        Object obj = method.invoke(sellStation,args);
                        return obj;
                    }
                }
        );
//        return proxyInstance;
    }
}
